﻿#ifndef PRIVATECHAT_H
#define PRIVATECHAT_H
#pragma once
#include <QWidget>
#include <QFileDialog>
#include <QDebug>
#include <QDateTime>
#include <QTime>
#include <QListWidgetItem>
#include <QFile>
#include <QTimer>
#include <QCloseEvent>
#include <QErrorMessage>
#include <QMouseEvent>


namespace Ui {
class PrivateChat;
}

class PrivateChat : public QWidget
{
    Q_OBJECT

public:
    explicit PrivateChat(QWidget *parent = nullptr);
    ~PrivateChat();
    static PrivateChat& getInstance();
    void setObjName(QString name);//设置聊天对象名字
    QString getObjName();//获取聊天对象名字
    QString getSelfName();
    void insertFrienNameToList(QString name);
    void restorChatRecord(QString name);//还原消息
    void SendFileData();
    void setSelectFriend(QString name);//设置选择的好友，好让其更新数据
    QString getFileName();
    QPixmap PixmapToRound(const QPixmap &src, const int &radius);//生成头像
    QWidget *CreateWidgetL_R(int i,QString name,QString data);//创建聊天时的左右窗口
    QWidget *CreateWidgetL_R(int i,QString name,QPixmap pix);//创建聊天时的左右窗口
    void addMsgWidget(QWidget* widget);
    void mousePressEvent(QMouseEvent *event);//鼠标点击
    void mouseMoveEvent(QMouseEvent *event);//鼠标移动
    void mouseReleaseEvent(QMouseEvent *event);//鼠标释放
    void getPoint(QPoint& point);
protected :
    void closeEvent(QCloseEvent *event);
private slots:
    void on_btn_select_img_clicked();

    void on_btn_send_clicked();

    void on_pushButton_clicked();

    void on_friend_list_itemClicked(QListWidgetItem *item);

    void ColoringListItem();//给正在聊天的好友在列表中显示选中

    void OnFileTransSTart();//响应文件发送的槽


    void on_toolButton_clicked();

    void on_toolButton_2_clicked();

    void on_tbtn_lookinfo_clicked();

    void on_tbtn_doudong_clicked();

    void on_tbtn_biaoqing_clicked();

    void on_tbtn_jietu_clicked();

    void on_tbtn_media_clicked();

signals:
    void FileTransSTart();//若对方同意接收文件后  则开始传输
private:
    Ui::PrivateChat *ui;
    QString m_windowname;//用于标识哪个窗口
    QTimer m_timer;//用于处理为选中好友上色
    QTimer m_filetimer;//用于文件传输
    QFile m_file;//文件指针
    uint filesize;//文件大小
    QString m_filepath;//记录文件路径
    uint sendsize;//已发送的大小
    QString filename;//文件名
    QListWidgetItem* m_prevItem;//记录上一个聊天对象的item
    bool isPressedWidget;//isPressedWidget和last用来控制窗口移动
    QPoint last;
};

#endif // PRIVATECHAT_H
